package com.zhanghe.study.study_scala.collection

import scala.collection.mutable

/**
 * Map
 *
 * @author zh
 * @date 2021/5/8 11:48
 */
object TestMap {
  def main(args: Array[String]): Unit = {
    println("创建方式=======")
    // 创建不可变的Map,Map底层每对key-value是一个Tuple2
    // 不可变的Map可以直接使用，无需引包
    val map = Map("张三" -> 10,"李四" -> 20)
    println(map)

    // 创建可变的Map
    val map1 = mutable.Map("zs"-> 15)
    println(map1)

    // 创建空的Map
    val map2 = new mutable.HashMap[String,Int]
    println(map2)
    // 采用对偶元组
    val map3 = Map(("aaa",1),("bbb",2))
    println(map3)

    println("存值操作========")
    // key存在则更新，key不存在则添加
    map2 += ("a"->0)
    map2.put("aa",1)

    println(map2)
    // key存在则修改，key不存在则修改
    map2("aa") = 2
    map2("zz") = 2
    println(map2)

    println("取值方式======")
    // 根据key取出元素 如果key不存在则抛出异常 java.util.NoSuchElementException: key not found: bb
    // 所以使用时需要先使用contains方法来判断key是否存在
//    println(map2("bb"))

    // 使用get(key)方法来取值 如果key存在，就会返回Some(值)，然后再次get就可以取到值
    // 如果key不存在就会返回None
    //Some(1)
    println(map2.get("aa"))
    println(map2.get("aa"))
    // None
    println(map2.get("bb"))
    if(map2.contains("bb")){
      map2.get("bb")
    }

    val option  = map2.get("aa")
    if(!option.eq(None)){
      println(option.get)
    }


    // getOrElse()取值  如果key存在则返回值，如果key不存在则返回默认值
    println(map2.getOrElse("bb",0))

    println("删除元素======")
    // 删除元素
    map2 -= ("a")
    println(map2)
    map2.remove("aa")
    println(map2)

    println("遍历元素======")
    // 遍历key、value
    for((key,value) <- map2){

    }

    // 遍历key
    for(key <- map2.keys){

    }

    // 遍历value
    for(value <- map2.values){

    }

    // 遍历元组Tuple2
    for(value <- map2){
      println(value._1+"---"+value._2)
    }



  }

}
